#pragma once
#include <ctime>
#include <cstdio>
#include <pthread.h>
#define INF 0
#define DBG 1
#define ERR 2
#define LOG_LEVEL DBG
#define LOG(log_level,format,...)do{\
        if(log_level<LOG_LEVEL)break;\
        time_t t=time(nullptr);\
        struct tm*ltm=localtime(&t);\
        char time_tmp[32]={0};\
        strftime(time_tmp,31,"%Y:%m:%d:%H:%M:%S",ltm);\
        fprintf(stdout,"[%p %s %s:%d]" format "\n",(void*)pthread_self(),\
        time_tmp,__FILE__,__LINE__,##__VA_ARGS__);\
} while (0)

#define INF_LOG(format,...) LOG(INF,format,##__VA_ARGS__)
#define DBG_LOG(format,...) LOG(DBG,format,##__VA_ARGS__)
#define ERR_LOG(format,...) LOG(ERR,format,##__VA_ARGS__)
